Namespace = {};
Namespace.register = function(fullNS) {
    // 将命名空间切成N部分, 比如Grandsoft、GEA等
    var nsArray = fullNS.split('.');
    var sEval = "";
    var sNS = "";
    for (var i = 0; i < nsArray.length; i++) {
        if (i != 0)
            sNS += ".";
        sNS += nsArray[i];
        // 依次创建构造命名空间对象（假如不存在的话）的语句
        // 比如先创建Grandsoft，然后创建Grandsoft.GEA，依次下去
        sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
    }
    if (sEval != "")
        eval(sEval);
};
Namespace.register("Ace.Widget");

//(function() {
    var Moudle= {
        dialog: {
            js:"http://static.aceona.com/app_js/jqueryUI/js/jquery-ui-1.8rc3.custom.min.js",
            css:"http://static.aceona.com/app_js/jqueryUI/css/custom-theme/jquery-ui-1.8rc3.custom.css",
            dependencies:["bgiframe","jAlert"]
        },
        jAlert: {
            js:"http://static.aceona.com/app_js/plugins_alerts/jquery.alerts.js",
            css:"http://static.aceona.com/app_js/plugins_alerts/jquery.alerts.css"
        }
    };
    Ace.Widget= {
        _isLoaderMoudles:[],
        LoadMoudle: function(options) {
            var defaults=$.extend({
                Moudle:null,
                callback: function() {
                },
                depends:[]
            },options|| {});
            if(defaults.Moudle!=null) {
                //多个参数数组
                if(typeof(defaults.Moudle)=='Array') {
                    for(var i=0,_length=defaults.Moudle.length;i<_length;i++) {
                        Ace.Widget.singleLoader(defaults.Moudle[i],defaults.callback);
                    }
                } else {
                    //单个参数
                    Ace.Widget.singleLoader(defaults.Moudle,defaults.callback);
                }
            } else {
                alert("请指定要加载的模块");
            }
        },
        singleLoader: function(Moudle,callback) {
            var _moudle_name=Moudle;
            if(jQuery.inArray(_moudle_name,Ace.Widget._isLoaderMoudles)==-1) {
                try {

                } catch(e) {
                    alert("Moulde传入的参数类型不对。");
                }
            } else {
                if(typeof(callback.constructor)=='function'&&callback.constructor==Function) {
                    callback();
                }
            }
        },
        use: function(name,callback) {
            //模块名
            var _name=name;
            var _needLoad=[];
            //传入只要一个a形式的模块参数
            if(typeof(_name)=='String') {
                add(_name,callback);
                //传入a,b,c类似的参数
            } else if(typeof(_name)=='String'&&_name.indexOf(",")!=-1) {
                //转在数组
                _needLoad=_name.split(",");
                add(_needLoad,callback);
            } else {
                //[a,b]的形式参数
                for(var i=0;i<_name.length;i++) {
                    add(_name[i],callback);
                }
            }
            //私有的函数
            function add(MoudleName,callback) {
                var moudleName=Moudle[MoudleName];
                console.log(moudleName);
                if(!moudleName) {
                    //alert("参数里有一个模块不存在！");
                    return;
                }
                for(var p in moudleName) {
                    if(moudleName.hasOwnProperty(p)) {
                        //css文件载入并且是它的属性
                        if(/\.css$/i.test(moudleName[p])) {
                            LazyLoad.css(moudleName[p],function() {
                                if($.isFunction(callback)){
                                    callback();
                                }
                            });
                            //js文件载入并且是它的属性
                        } else if(/\.js$/i.test(moudleName[p])) {
                            LazyLoad.js(moudleName[p], function() {
                                if($.isFunction(callback)){
                                  callback();
                                }
                            });
                            //带有依赖性的组件，递归加载
                        } else if(moudleName["dependencies"]) {
                             var d=moudleName["dependencies"];
                             for(var i=0;i<d.length;d++){
                                  add(d[i],callback);
                             }    
                        }
                    }
                }

            }

        },
    }
//})();
/*Loader Code*/